/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ciberiasoluciones.cibervoto.utility;

import com.ciberiasoluciones.cibervoto.modelo.CandidatosCargos;
import com.ciberiasoluciones.cibervoto.modelo.Cargos;
import com.ciberiasoluciones.cibervoto.modelo.Miembros;
import com.ciberiasoluciones.cibervoto.modelo.Organizaciones;
import com.ciberiasoluciones.cibervoto.modelo.PoblacionElectoral;
import com.ciberiasoluciones.cibervoto.modelo.ProcesosElectorales;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;


/**
 *
 * @author IngJarava
 */
public class Cibervoto_sesion
{
    private ProcesosElectorales             pe;
    private Organizaciones                  organizacion;
    private int                             user;
    private String                          pass;
    private static int                      id_org = 1;
    private boolean                         avotado;
    private boolean                         sesion_;
    private Collection<Cargos>              cargos;
    private Cargos                          cargo;
    private Iterator<Cargos>                it_cargos;
    private Collection<CandidatosCargos>    candidatos;
    private Iterator<CandidatosCargos>      it_candidatos;
    
    
    public Cibervoto_sesion(){
        controlsingleton = new ControladorSingleton();
        getProc_elec_Vigente();
    }
   //Iterator<Cargos> it_cargos          = cargos.iterator();
    private CandidatosCargos                next;
    private Miembros m_elector;
    
    private Miembros miembros;
    private static ControladorSingleton          controlsingleton;   
    
      
    public void     setUser(int user_){  user = user_;  } 
    public void     setPassword(String pass_){ pass = pass_;  } 
    public int      getUser(){ return user;  } 
    
        
    public void     setId_Organizacion(int org_){ org_ = 1; id_org = org_; } 
      
    public synchronized boolean login(){
        if(controlsingleton.getInstanceControlador().validarInicioSesion(pe, String.valueOf(user), pass)==true)
        {
            sesion_ =  true;
        }
         else{
          sesion_ = false;
        }
           return sesion_;
     }
     
     /* ------------ Metodos para iniciar sesion ---------------------------- */   
    public synchronized boolean getVotar(){
        cargos = controlsingleton.getInstanceControlador().getCargos(pe);
        it_cargos = cargos.iterator();
        while(it_cargos.hasNext())
        {
            Cargos cargo = it_cargos.next();
            Collection<PoblacionElectoral> sufragantes = controlsingleton.getInstanceControlador().getSufragantes(cargo);
            Miembros usuario = controlsingleton.getInstanceControlador().darUsuario(pe, String.valueOf(user), pass);
            Collection<PoblacionElectoral> poblacion = usuario.getPoblacionElectoralCollection();
            Iterator<PoblacionElectoral> iterador = poblacion.iterator();
            while(iterador.hasNext())
            {
                PoblacionElectoral pob = iterador.next();
                if(pob.getPoblacionElectoralPK().getCodElector()==usuario.getMiembrosPK().getCod()&& sufragantes.contains(pob))
                {
                   avotado = true; break;
                }else
                {
                   avotado = false; break;
                }
            }
        } 
        return avotado;
    }
        
    public synchronized boolean getProc_elec_Vigente(){
        boolean estado = false;
        organizacion = controlsingleton.getInstanceControlador().getOrganizacion(id_org);
        /* obtiene el proceso electoral vigente para la organizacion */
        pe = controlsingleton.getInstanceControlador().getProcesoElectoralVigente(organizacion);

        if (pe!=null)
        {
           estado = true;
        }
            
      return estado;
    }
    
    public synchronized int getCodigoMiembroPK(){
       return (controlsingleton.getInstanceControlador().darUsuario(pe, String.valueOf(user), pass).getMiembrosPK().getCod());
    }
     
    public synchronized int getCodProcesoElectoralPK(){
       return (pe.getProcesosElectoralesPK().getCod());
    }
    
    public synchronized Date getFechaCierre()
    {
        return new Date(getProcesoElectoralVigente().getFechaCierre().getTime()+ 
                getProcesoElectoralVigente().getHoraCierre().getTime());
    }
    
    
    /* ------------ FIN de Metodos Iniciales --------------------------------- */ 
    
    
    
    /* ------------ Metodos para el tarjeton --------------------------------- */   
   
    public ProcesosElectorales getProcesoElectoralVigente(){
        /* obtiene el proceso electoral vigente para la organizacion */
            pe  = controlsingleton.getInstanceControlador().getProcesoElectoralVigente(organizacion);
        return pe;
    }
    
    public Collection<Cargos> getCargosCollection(ProcesosElectorales a){
            return controlsingleton.getInstanceControlador().getCargos(a);
    }
    
    public  Miembros getMiembrosElector(){
        return m_elector;
    }
    
    public void setMiembrosElector(Miembros m_elector_){
        m_elector = m_elector_;
    }
    public Collection<CandidatosCargos> getCollectionCandidatos(){
        return candidatos;
    }
    
    public void setCollection_Candidatos(Collection<CandidatosCargos>  a){
        candidatos = a;
    }
    
    
    // <editor-fold defaultstate="collapsed" desc="it_candidatos it_cargos. Click en el signo + ">
        public Iterator<CandidatosCargos>  getIterator_Candidatos(){
           return   it_candidatos;
        }
        public void setIterator_Candidatos(Iterator<CandidatosCargos> a){
             it_candidatos = a;
        }
        public Iterator<Cargos> getIterator_Cargos(){
           return it_cargos;
        }
         public void  setIterator_Cargos(Iterator<Cargos> a){
           it_cargos = a;
        }// </editor-fold>
     
     
    public Collection<Cargos>  getCollection_Cargos(){
        return cargos;
    }
    
    public void setCollection_Cargos(Collection<Cargos>  a){
        cargos = a; 
    }
    
    public Miembros getMiembros(){
        return miembros;
    }
    
    public void setCargo(Cargos a){
        cargo = a;
    }
    
    public Cargos getCargo(){
        return cargo;
    }
    
    public void setMiembros(Miembros a){
         miembros = a;
    }
    
        
    /*Metodos por el cual se da la lista de los candidatos por empresas */
    public Iterator<CandidatosCargos> getListaCandidatosEmpresas()
    {
            m_elector = controlsingleton.getInstanceControlador().getMiembro(pe, getCodigoMiembroPK());
            
            setIterator_Cargos(cargos.iterator());
            setIterator_Candidatos(getIterator_Candidatos());
            
        return getIterator_Candidatos(); 
    }
    
    public Miembros getListaCargosEmpresas()
    {
        Miembros a = null;
        while(getListaCandidatosEmpresas().hasNext())
            {
             Cargos cargo = it_cargos.next();
             setCollection_Candidatos(controlsingleton.getInstanceControlador().getCandidatos(cargo));
             setIterator_Candidatos(getCollectionCandidatos().iterator());
             

             while(getIterator_Candidatos().hasNext())
             {
                setNextCargo(getIterator_Candidatos().next());
                /*getNextCargo().getCargos().getCargosPK().getCod(); //cod cargo
                getNextCargo().getCargos().getCargosPK().getCodOrganizacion(); //organizacion
                getNextCargo().getCargos().getCargosPK().getCodProcesoElectoral(); //procesp electoral
                getNextCargo().getPoblacionElectoral().getMiembros().getMiembrosPK().getCod(); //cod candidato*/
                miembros = getNextCargo().getPoblacionElectoral().getMiembros();
                
                
                if(miembros.getEmpresa().equals(m_elector.getEmpresa()))
                {
                   a = miembros;
                }
             }
            } 
        return a; 
    }
    
    
    public CandidatosCargos getNextCargo(){
        return next;
    }
    
     public void setNextCargo(CandidatosCargos a){
        next = a;
    }
    
     public Miembros getListaCandidatosEmpresas2(){
        Miembros a = null;
            cargos           = getCargosCollection(pe);
            m_elector = controlsingleton.getInstanceControlador().getMiembro(pe, getCodigoMiembroPK());
            
            while(it_cargos.hasNext())
            {
             Cargos cargo = it_cargos.next();
             candidatos = controlsingleton.getInstanceControlador().getCandidatos(cargo);
             it_candidatos = candidatos.iterator();
             int k=1;

             while(getIterator_Candidatos().hasNext())
                {
                next = it_candidatos.next();
                next.getCargos().getCargosPK().getCod(); //cod cargo
                next.getCargos().getCargosPK().getCodOrganizacion(); //organizacion
                next.getCargos().getCargosPK().getCodProcesoElectoral(); //procesp electoral
                next.getPoblacionElectoral().getMiembros().getMiembrosPK().getCod(); //cod candidato
                miembros = next.getPoblacionElectoral().getMiembros();
                if(miembros.getEmpresa().equals(m_elector.getEmpresa()))
                {
                   miembros = a;
                }
            }
        } 
        return miembros; 
}
    
    
    
    
    /* ------------ FIN de Metodos para el tarjeton ------------------------- */
    
    
   
    @Override
    protected void finalize () throws Throwable{
        super.finalize();
    }

   
}
